perm filename CARNES.FAI[AER,HPM] blob sn#210454 filedate 1976-04-11 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002		TITLE	CARNES
C00004 00003	AR2TAB:	MOVEI	T,44			TOTAL BITS/WORD
C00006 00004	CAR12:	D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D
C00035 00005		END
C00036 ENDMK
C⊗;
	TITLE	CARNES

;FOR RECOGNIZING CARS
	
	ENTRY	VCAR
	ENTRY	CAR12,CARW12,CARH12

	EXTERN	CORGET,CORREL,SQRL
	
	PCLN←←0
	PCWD←←1
	PCBY←←2
	PCBYA←←3
	LNWD←←4
	LNBY←←5
	LNBYA←←6
	WDBY←←7
	WDBI←←10
	BYBI←←11
	BPTAB←←12
	LINTAB←←13

	T←1  ↔  TT←2  ↔  TTT←3  ↔  ARRY1←4  ↔  ARRY2←5  ↔  P←17
	A←6  ↔  B←7  ↔  C←10  ↔  D←11  ↔  E←13  ↔  F←14  ↔  G←15


RETAD:	0
TEMP:	BLOCK	50		;TEMPORARY STORAGE FOR STUFF
AR2TAB:	MOVEI	T,44			;TOTAL BITS/WORD
	IDIV	T,BYBI(ARRY2)		;BYTE SIZE
	MOVEM	T,WDBY(ARRY2)		;BYTES PER WORD
	SUBI	TT,44			;-NUMBER OF USED BITS/WORD
	MOVNM	TT,WDBI(ARRY2)		;SAVED
	ADD	T,LNBY(ARRY2)
	SUBI	T,1
	IDIV	T,WDBY(ARRY2)		;NUMBER OF WORDS/SCANLINE
	MOVEM	T,LNWD(ARRY2)
	MOVE	TT,T	 		;WORDS/LINE
	IMUL	TT,WDBY(ARRY2)		;BYTES/WORD
	MOVEM	TT,LNBYA(ARRY2)		;GIVES BYTES/LINE, INCLUDING NULLS
	IMUL	TT,PCLN(ARRY2)
	MOVEM	TT,PCBYA(ARRY2)		;TOTAL BYTES/PIC, INCL. NULLS
	IMUL	T,PCLN(ARRY2)		;LINES IN THE PICTURE
	MOVEM	T,PCWD(ARRY2)		;WORDS IN THE PICTURE
	MOVE	T,LNBY(ARRY2)
	IMUL	T,PCLN(ARRY2)
	MOVEM	T,PCBY(ARRY2)		;BYTES/PIC, NOT INCL. NULLS
	MOVEI	T,14(ARRY2)
	ADD	T,PCLN(ARRY2)
	MOVEM	T,BPTAB(ARRY2)		;ADDRESS OF BYTE POINTER TABLE
	ADD	T,LNBYA(ARRY2)		;ADDR OF FIRST WORD IN PICTURE
	MOVN	TT,PCLN(ARRY2)		;SET UP CNTR FOR LINE ADDRESSES
	HRL	TT,TT
	HRRI	TT,LINTAB(ARRY2)
LTLP:	MOVEM	T,(TT)			;MAKE LINE TABLE
	ADD	T,LNWD(ARRY2)
	AOBJN	TT,LTLP
	MOVN	TT,BPTAB(ARRY2)
	HRL	TT,LNBYA(ARRY2)		;SET UP CNTR FOR BYTE TABLE
	AOBJN	TT,			;DECR ADDRESS AND INCR COUNT BY 1
	MOVN	TT,TT
	MOVEI	T,4400
	ADD	T,BYBI(ARRY2)
	LSH	T,6
	HRLZ	T,T
BYLP:	MOVEM	T,(TT)			;MAKE BYTE POINTER TABLE
	IBP	T
	AOBJN	TT,BYLP
	POPJ	P,
CAR12:	D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ C ↔ C ↔ C ↔ C ↔ C ↔ A ↔ D
	D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
	D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
	D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
	D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
	D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
	D ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ B ↔ B ↔ D
	D ↔ C ↔ C ↔ C ↔ C ↔ B ↔ B ↔ B ↔ B ↔ C ↔ D
	D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
	D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
	D ↔ C ↔ C ↔ A ↔ C ↔ C ↔ C ↔ C ↔ C ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ A ↔ D
	D ↔ C ↔ C ↔ C ↔ A ↔ A ↔ A ↔ A ↔ A ↔ C ↔ D
	D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D
	D ↔ D ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ C ↔ D ↔ D
	D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D ↔ D

CARHIG←←=26 ↔ CARWID←←=11

NOAS: 79.0
NOBS: 40.0
NOCS: 95.0
NODS: 72.0


CARH12:	CARHIG
CARW12:	CARWID


MAXBY:	31.0
MAXSQ:	961.0

X1←←A ↔ Y1←←B ↔ X2←←C ↔ Y2←←D
CARM←←TEMP ↔ SHFT2←TEMP+1 ↔ AVCAR←←TEMP+2 ↔ AY2←←TEMP+3
BX1←←TEMP+4 ↔ BY1←←TEMP+5 ↔ BX2←←TEMP+6 ↔ BY2←←TEMP+7
SOUWIN←←TEMP+10 ↔ DESWIN←←TEMP+11 ↔ DEXSKP←←TEMP+12 ↔ DEYSKP←←TEMP+13
WSIZ1←←TEMP+14 ↔ DWSIZ←←TEMP+15 ↔ WSIZY1←←TEMP+16
SOUSIZ←←TEMP+20 ↔ WSIZ←←TEMP+21 ↔ DWSIZ←←TEMP+22 ↔ NEGXC←TEMP+23
MAXBYT←←TEMP+24 ↔ MAXBSQ←←TEMP+25

ASUM←←TEMP+26 ↔ ASQR←←TEMP+27
BSUM←←TEMP+30 ↔ BSQR←←TEMP+31
CSUM←←TEMP+32 ↔ CSQR←←TEMP+33
DSUM←←TEMP+34 ↔ DSQR←←TEMP+35

	DEFINE	FLOAT(N)
<	TLC	N,232000
	FADR	N,N	>

	OPDEF	FIX[247000233000]


VCAR:	POP	P,RETAD
	POP	P,CARM
	POP	P,BX2		;A CARRELATOR. FINDS THE BEST MATCH
	POP	P,BY2		;TO A CAR
	POP	P,BX1		;IN ARRY2(BX1:BY1,BX2:BY2)
	POP	P,BY1
	POP	P,ARRY2
	MOVE	X1,BX1
	MOVE	X2,BX2		;   VCAR(
	MOVE	Y1,BY1		;         PICT,BX1,BY1,BX2,BY2);
	MOVE	Y2,BY2

	MOVEI	T,5		;TABLE)
	SUB	T,BYBI(ARRY2)
	HRRZM	T,SHFT2

	MOVEI	T,1
	LSH	T,5
	SUBI	T,1
	MOVEM	T,MAXBYT
	IMUL	T,T
	MOVEM	T,MAXBSQ

FIXB:	CAMLE	X1,X2		;FIRST FIX UP THE LIMITS SO
	EXCH	X1,X2		;X1≤X2, X1≥0 X2<WIDTH ETC.
	CAIGE	X1,0
	MOVEI	X1,0
	MOVE	T,LNBY(ARRY2)
	CAML	X2,T
	MOVEI	X2,-1(T)

	CAMLE	Y1,Y2		;SIMILAR FOR Y
	EXCH	Y1,Y2
	CAIGE	Y1,0
	MOVEI	Y1,0
	MOVE	T,PCLN(ARRY2)
	CAML	Y2,T
	MOVEI	Y2,-1(T)

	CAMG	X1,X2
	CAMLE	Y1,Y2
	JRST	FIXB

	MOVEM	X1,BX1
	MOVEM	X2,BX2
	MOVEM	Y1,BY1
	MOVEM	Y2,BY2

	MOVE	T,BX2		;QUIT IF DESTINATION WINDOW IS TOO SMALL
	SUB	T,BX1
	SUBI	T,CARWID
	JUMPLE	T,QUITR

	MOVE	T,BY2
	SUB	T,BY1
	SUBI	T,CARHIG
	JUMPLE	T,QUITR

THIS←←TT ↔ SIZ←←TTT

	MOVEI	X2,CARWID
	MOVEI	X1,=1
	MOVEI	Y2,CARHIG
	MOVEI	Y1,=1

	MOVEI	SIZ,1(X2)	;CALCULATE SIZE OF BUFFER AREA
	SUB	SIZ,X1		;FOR THE SOURCE WINDOW CODE
	MOVEM	SIZ,WSIZ1	;WILL BE X WINDOWSIZE-1
	MOVEM	SIZ,WSIZ	;IS X WINDOWSIZ
	MOVNM	SIZ,DEXSKP	;WILL BE DELTA XB - DELTA XA
	MOVEI	T,1(Y2)
	SUB	T,Y1
	MOVEM	T,WSIZY1	;WILL BE X WINDOWSIZE-1
	MOVNM	T,DEYSKP	;WIL BE DELTA YB - DELTA YA
	IMUL	SIZ,T
	MOVEM	SIZ,SOUSIZ	;SOURCE WINDOW SIZE (IN PIXELS)
	ASH	SIZ,1
	ADDI	SIZ,1
	PUSHJ	P,CORGET	;AND MAKE THAT BUFFER
	HALT
	MOVEM	THIS,SOUWIN

	SUBI	THIS,1
	MOVN	T,T
	HRLZ	T,T
	HRRI	T,LINTAB(ARRY1)	;Y COUNTER
	ADD	T,Y1

	MOVE	0,BX2		;FINISH UP MAKING DELTA XB -DELTA XA
	SUB	0,BX1
	ADDI	0,1
	MOVEM	0,DWSIZ
	ADDM	0,DEXSKP
	MOVE	0,BY2		;AND THE Y'S TOO
	SUB	0,BY1
	ADDI	0,1
	ADDM	0,DEYSKP
	SOS	WSIZ1		;NOT TO MENTION X WINDOWSIZ-1
	SOS	WSIZY1		;AND Y WINDOWSIZ-1

	MOVE	G,[MOVE TT,0(T)]
	MOVEI	B,0
			;DON'T FORGET! A,B,C,D ARE X1,X2,Y1,Y2 ALSO
					;SET UP INNER
ILYLP:	MOVE	TTT,WSIZ		;"LOOP" OF THE CORRELATION
ILXLP:	PUSH	THIS,G			;A SEQUENCE OF
	ADDI	G,1			; MOVE TT,POSB(T)
	MOVE	A,CAR12(B)
	ADDI	B,1
	LSH	A,27
	ADD	A,[ADD	0,SQRL(TT)]
	PUSH	THIS,A
	SOJG	TTT,ILXLP
	ADD	G,DEXSKP
	AOBJN	T,ILYLP

	PUSH	THIS,[JRST INRDON]	;AND THE FINAL INSTR.
	

	MOVE	X1,BX1			;MAKE THE DESTINATION
	MOVE	X2,BX2			;WINDOW BUFFER
	MOVE	Y1,BY1
	MOVE	Y2,BY2
	MOVEI	SIZ,1(X2)
	SUB	SIZ,X1
	MOVEM	SIZ,DWSIZ
	MOVEI	T,1(Y2)
	SUB	T,Y1
	IMUL	SIZ,T
	PUSHJ	P,CORGET
	HALT
	MOVEM	THIS,DESWIN

	SUBI	THIS,1
	MOVN	T,T			;Y COUNTER
	HRLZ	T,T
	HRRI	T,LINTAB(ARRY2)
	ADD	T,Y1

	MOVE	E,BPTAB(ARRY2)		;BYTE POINTER SKELETON
	ADDI	E,-1(X1)		;FOR DESTINATION
	MOVE	E,(E)

BUYLP:	MOVE	F,E			;UNPACKS THE DESTINATION
	ADD	F,(T)			;WINDOW, ONE WORD/SAMPLE
	MOVE	TTT,DWSIZ
BUXLP:	ILDB	0,F
	LSH	0,@SHFT2		;SHIFT TO 5 BITS
	PUSH	THIS,0
	SOJG	TTT,BUXLP
	AOBJN	T,BUYLP

	SETZM	AVCAR

	MOVN	B,DEXSKP		;NOW ACTUALLY CORRELATE
	SUBI	B,1
	MOVEM	B,NEGXC

	MOVE	E,CARM
	SUBI	E,1			;SET UP POINTER FOR RESULTS

	MOVE	TTT,DEYSKP		;NUMBER OF ROWS
	MOVE	T,DESWIN		;WHERE TO START
CRYLP:	HRL	T,NEGXC			;INIT X CNTR, BUT KEEP OLD POSN
CRXLP:	SETZB	A,B			;ACCUMULATE CURRENT SUM IN A
	SETZB	C,D
	JRST	@SOUWIN			;JUMP TO PREVIOUSLY CREATED CODE

INRDON:	MOVE	F,A
	ASH	F,-24			;SAVE SIGMA A
	FLOAT(F)
	FDVR	F,NOAS
	FDVR	F,MAXBY
	MOVEM	F,ASUM			;AND SIGMA A↑2
	TLZ	A,777774
	FLOAT(A)
	FDVR	A,NOAS
	FDVR	A,MAXSQ
	MOVEM	A,ASQR

	MOVE	F,B
	ASH	F,-24			;SIGMAS FOR B ALSO
	FLOAT(F)
	FDVR	F,NOBS
	FDVR	F,MAXBY
	MOVEM	F,BSUM
	TLZ	B,777774
	FLOAT(B)
	FDVR	B,NOBS
	FDVR	B,MAXSQ
	MOVEM	B,BSQR

	MOVE	F,C
	ASH	F,-24			;SIGMAS FOR C ALSO
	FLOAT(F)
	FDVR	F,NOCS
	FDVR	F,MAXBY
	MOVEM	F,CSUM
	TLZ	C,777774
	FLOAT(C)
	FDVR	C,NOCS
	FDVR	C,MAXSQ
	MOVEM	C,CSQR

	MOVE	F,D
	ASH	F,-24			;SIGMAS FOR D ALSO
	FLOAT(F)
	FDVR	F,NODS
	FDVR	F,MAXBY
	MOVEM	F,DSUM
	TLZ	D,777774
	FLOAT(D)
	FDVR	D,NODS
	FDVR	D,MAXSQ
	MOVEM	D,DSQR

	MOVE	A,ASUM
	FMPR	A,A
	FADR	A,[0.0]
	FSBR	A,ASQR			;CALCULATE 1-(A-ABAR)↑2 BAR

	MOVE	B,BSUM			;CALCULATE 1-(B-BBAR)↑2 BAR
	FMPR	B,B
 	FADR	B,[0.0]
	FSBR	A,BSQR

 	MOVE	C,[0.0]
	FSBR	C,CSQR
	FSBR	C,CSQR

	MOVE	D,ASUM			;CALCULATE (DBAR-ABAR)↑2 BAR
	FSBR	D,DSUM
	FMPR	D,D

	FADR	A,B
	FADR	A,C
	FDVR	A,[4.0]
	MOVN	A,A

	MOVE	B,BSUM
	FSBR	B,DSUM
	MOVM	B,B
	MOVE	C,ASUM
	FSBR	C,DSUM
	MOVM	C,C
	CAMGE	B,C
	MOVE	B,C
	MOVE	C,CSUM
	FSBR	C,DSUM
	MOVM	C,C
	CAMGE	B,C
	MOVE	B,C
	CAMG	B,[0.1]
	MOVN	A,A

	PUSH	E,A			;WHICH WE STORE

	FADRM	A,AVCAR

	AOBJN	T,CRXLP			;SHIFT IN X, AND TRY AGAIN
	ADD	T,WSIZ1			;ADD WHATS NEEDED TO GET TO NEXT
	SOJGE	TTT,CRYLP			;SCANLINE, AND TRY AGAIN

	MOVE	THIS,SOUWIN		;RETURN THE USED CORAGE
	PUSHJ	P,CORREL
	MOVE	THIS,DESWIN
	PUSHJ	P,CORREL

	MOVE	1,AVCAR			;GET READY TO RETURN VALUE OF MATCH
QUITR:	JRST	@RETAD			;AND RETURN
	END